// 新增：退出聊天室函数
function exitRoom() {
    // 1. 关闭WebSocket连接（触发后端断开逻辑）
    if (webSocket && webSocket.readyState === webSocket.OPEN) {
        webSocket.close(); // 仅关闭连接，不手动重置计数
        document.getElementById('message').innerHTML = "";
        console.log("WebSocket连接关闭，等待后端更新在线人数");
    }

    updateOnlineCount(0);

    // 其他逻辑（清空输入框、聊天记录、重置状态）保持不变
    document.getElementById('text').value = "";
    document.getElementById('room').value = "";
    document.getElementById('message').innerHTML = "";
    currentGroup = null;

    // 更新当前聊天室显示
    document.querySelector('#current-room .font-medium').textContent = "暂无";
    // 更新侧边栏
    updateJoinedRoomsList();

    alert("已退出聊天室");
}

// 新增：在线人数更新函数
function updateOnlineCount(count) {
    // 获取显示在线人数的数字元素（使用类选择器更精准）
    var onlineNum = document.querySelector('#online-count .text-blue-600');
    onlineNum.textContent = count; // 更新数字
    // 新增过渡动画（150ms渐变效果）
    onlineNum.style.opacity = '0.8';
    onlineNum.style.transform = 'scale(1.1)';
    setTimeout(() => {
        onlineNum.style.opacity = '1';
        onlineNum.style.transform = 'scale(1)';
    }, 150);
}

window.onload = function () {
    currentNick = document.getElementById('nick').value; // 应在页面加载完成后取值
    // 检查是否已登录（防止直接访问main.html）
    if (!currentNick || currentNick.trim() === "") {
        window.location.href = "/"; // 未登录则跳转登录页
        return;
    }
};

function enter() {
    var nick = document.getElementById('nick').value;
    var room = document.getElementById('room').value;
    // 保存当前聊天室的聊天信息
    if (currentGroup) {
        chatHistory[currentGroup] = document.getElementById('message').innerHTML;
    }
    currentNick = nick;
    currentGroup = room;

    if (room) {
        alert("您已进入聊天室 " + room);
        // 更新显示的聊天室名称
        document.querySelector('#current-room .font-medium').textContent = room;
        // 恢复曾经的聊天信息
        if (chatHistory[room]) {
            document.getElementById('message').innerHTML = chatHistory[room];
            console.log(chatHistory[room]);
            console.log("520");
        } else {
            document.getElementById('message').innerHTML = "";
        }
    }

    // 添加到加入的聊天室列表
    if (!joinedRooms.includes(room)) {
        joinedRooms.push(room);
    }
    // 更新侧边栏
    updateJoinedRoomsList();

    var map = new Map();
    map.set("type", "init");
    map.set("nick", nick);
    map.set("room", room);
    var message = Map2Json(map);
    var messageWithHeader = addHeader(message);
    webSocket.send(messageWithHeader);

    startHeartbeat(); // 建立连接后开启心跳
}

// 修改 send 函数，添加包头
function send() {
    var msg = document.getElementById('text').value;
    if (msg.trim() === "") return; // 忽略空消息

    // 本地先显示自己的消息（带“(我)”标识）
    setMessageInnerHTML(`${currentNick}(我): ${msg}`);

    var map = new Map();
    map.set("type", "msg");
    map.set("msg", msg);
    map.set("group", currentGroup); // 带上当前聊天室的信息
    var map2json = Map2Json(map);
    if (map2json.length < 100) {
        const messageWithHeader = addHeader(map2json);
        webSocket.send(messageWithHeader);
        document.getElementById('text').value = ""; // 清空输入框
    } else {
        console.log("文本太长了，少写一点吧");
    }
}

// 将消息显示在网页上（优化显示逻辑）
function setMessageInnerHTML(content) {
    var messageDiv = document.getElementById("message");
    messageDiv.innerHTML += `<div class="mb-2 p-2 bg-gray-100 rounded-md">${content}</div>`; // 使用div包裹更清晰，添加背景色和圆角
    // 自动滚动到最新消息
    messageDiv.scrollTop = messageDiv.scrollHeight;
}

function Map2Json(map) {
    const obj = {};
    map.forEach((value, key) => {
        obj[key] = value;
    });
    return JSON.stringify(obj); // 使用标准JSON序列化
}

// 新增：更新加入的聊天室列表
function updateJoinedRoomsList() {
    var joinedRoomsDiv = document.getElementById('joined-rooms');
    joinedRoomsDiv.innerHTML = "";
    joinedRooms.forEach(room => {
        var roomItem = document.createElement('div');
        roomItem.classList.add('flex', 'items-center', 'space-x-2', 'cursor-pointer', 'hover:bg-gray-200', 'p-2', 'rounded-md');
        roomItem.addEventListener('click', function () {
            switchRoom(room);
        });
        if (room === currentGroup) {
            roomItem.classList.add('bg-blue-100');
            roomItem.innerHTML = `<span class="text-blue-600">${room}</span> <i class="fa-solid fa-circle-dot text-green-500"></i>`;
        } else {
            roomItem.innerHTML = `<span>${room}</span> <i class="fa-solid fa-circle text-gray-400"></i>`;
        }
        joinedRoomsDiv.appendChild(roomItem);
    });
}

// 新增：切换聊天室函数
function switchRoom(room) {
    if (room === currentGroup) return;
    // 保存当前聊天室的聊天信息
    if (currentGroup) {
        chatHistory[currentGroup] = document.getElementById('message').innerHTML;
    }
    currentGroup = room;
    // 更新显示的聊天室名称
    document.querySelector('#current-room .font-medium').textContent = room;
    // 恢复曾经的聊天信息
    if (chatHistory[room]) {
        // 避免重复显示，先清空消息区域
        document.getElementById('message').innerHTML = "";
        /* document.getElementById('message').innerHTML = chatHistory[room];
         console.log(chatHistory[room]);*/
    } else {
        document.getElementById('message').innerHTML = "";
    }
    // 重置当前聊天室的已显示消息 ID 集合
    displayedMessageIds[currentGroup] = new Set();
    // 更新侧边栏
    updateJoinedRoomsList();

    var map = new Map();
    map.set("type", "switch");
    map.set("nick", currentNick);
    map.set("room", room);
    var message = Map2Json(map);
    var messageWithHeader = addHeader(message);
    webSocket.send(messageWithHeader);
}
